]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
shell/window-preview-layout: Fix memory leaks
authorSebastian Keller <skeller@gnome.org>
Mon, 21 Mar 2022 19:45:36 +0000 (20:45 +0100)
committerMarge Bot <marge-bot@gnome.org>
Fri, 22 Apr 2022 15:02:29 +0000 (15:02 +0000)
The WindowInfo allocated when adding a window was not getting free'd
when the window was getting removed again or the layout was getting
disposed. Also the hash table in which the WindowInfos are stored was
not getting free'd on destruction either. Both could result in small
leaks after closing the overview.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5238
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2256>

src/shell-window-preview-layout.c

index a759a74f17341da51adb16fcf06e804cb636138c..062726409343a8f08cb09c524434b23d77cd488c 100644 (file)
@@ -292,6 +292,19 @@ shell_window_preview_layout_dispose (GObject *gobject)
   G_OBJECT_CLASS (shell_window_preview_layout_parent_class)->dispose (gobject);
 }
 
+static void
+shell_window_preview_layout_finalize (GObject *gobject)
+{
+  ShellWindowPreviewLayout *self = SHELL_WINDOW_PREVIEW_LAYOUT (gobject);
+  ShellWindowPreviewLayoutPrivate *priv;
+
+  priv = shell_window_preview_layout_get_instance_private (self);
+
+  g_hash_table_destroy (priv->windows);
+
+  G_OBJECT_CLASS (shell_window_preview_layout_parent_class)->finalize (gobject);
+}
+
 static void
 shell_window_preview_layout_init (ShellWindowPreviewLayout *self)
 {
@@ -299,7 +312,8 @@ shell_window_preview_layout_init (ShellWindowPreviewLayout *self)
 
   priv = shell_window_preview_layout_get_instance_private (self);
 
-  priv->windows = g_hash_table_new (NULL, NULL);
+  priv->windows = g_hash_table_new_full (NULL, NULL, NULL,
+                                         (GDestroyNotify) g_free);
 }
 
 static void
@@ -314,6 +328,7 @@ shell_window_preview_layout_class_init (ShellWindowPreviewLayoutClass *klass)
   layout_class->set_container = shell_window_preview_layout_set_container;
 
   gobject_class->dispose = shell_window_preview_layout_dispose;
+  gobject_class->finalize = shell_window_preview_layout_finalize;
   gobject_class->get_property = shell_window_preview_layout_get_property;
 
   /**